package biblio.utils;

import biblio.model.Biblio;
import biblio.model.Revue;

/**
 * Outil de recherche dans une bibliotheque
 * @author Groupe 2
 * @version 18/11/13
 */
public class Search<E extends Revue> {
	
  /** La bibliotheque a rechercher*/
	private Biblio<E> bibli;
	
  /**
   * Cree un outil de recherche associe a bibli, bibli doit etre non null
   */
	public Search(Biblio<E> bibli){
		this.bibli = bibli;
	}
	
  /**
   * @pre title est non null
   * @post retourne la revue associee a la cle title
   */
	public Revue searchTitle(String title){
		title = title.toLowerCase();
		return bibli.getByTitle(title);
	}
	
  /**
   * @pre rank est non null
   * @post retourne la revue associee a la cle title
   */
	public Revue searchRank(String rank){
		rank = rank.toLowerCase();
		return bibli.getByRank(rank);
	}
	
  /**
   * @pre for1 est non null
   * @post retourne la revue associee a la cle for1
   */
	public Revue searchFor1(String for1){
		for1 = for1.toLowerCase();
		return bibli.getByFor1(for1);
	}
	
  /**
   * @pre for2 est non null
   * @post retourne la revue associee a la cle for2
   */
	public Revue searchFor2(String for2){
		for2 = for2.toLowerCase();
		return bibli.getByFor2(for2);
	}
	
  /**
   * @pre for3 est non null
   * @post retourne la revue associee a la cle for3
   */
	public Revue searchFor3(String for3){
		for3 = for3.toLowerCase();
		return bibli.getByFor3(for3);
	}
	
  /**
   * @pre for1Name est non null
   * @post retourne la revue associee a la cle for1Name
   */
	public Revue searchFor1Name(String for1Name){
		for1Name = for1Name.toLowerCase();
		return bibli.getByFor1Name(for1Name);
	}
	 
  /**
   * @pre for2Name est non null
   * @post retourne la revue associee a la cle for2Name
   */
	public Revue searchFor2Name(String for2Name){
		for2Name = for2Name.toLowerCase();
		return bibli.getByFor2Name(for2Name);
	}
	
  /**
   * @pre for3Name est non null
   * @post retourne la revue associee a la cle for3Name
   */
	public Revue searchFor3Name(String for3Name){
		for3Name = for3Name.toLowerCase();
		return bibli.getByFor3Name(for3Name);
	}
}
